10 PRINT "HARDY-CRQSS LOOP BALANCING NETWORK PROGRAM, NET.BAS": PRINT 20 'U.S. CUSTOMARY(USC) OR SI UNITS(SI) MAY BE USED. 30 'HAZEN-WILLIAMS(HW) OR DARCY-WEISBACH(DW) EQUATION MAY BE USED FOR PIPES. 40 'DATA ENTRY VIA READ AND DATA STATEMENTS. 50 '*******READ DATA AND PRINT NETWORK INFORMATIQN********* 60 DEFINT I-K, N 70 DIM ITYPE(1000), ELEM(500), IND(500), Q(100), H(100), S(20), IX(240) 80 FOR J = 1 TO 100: ITYPE(J) = 5: H(J) = -1000: NEXT J 90 READ TITLE$: PRINT : PRINT " "; TITLE$ 100 READ TT$, KK, TOL, VNU, DEFA 'NT$=USC OR SI, KK=NO. OF ITER., VNU=KIN. VISC. 110 'TOL=TOLERANCE IN ITERATION, DEFA=DEFAULT COEF,- EITHER C OR EPS 120 IF (TT$ = "SI" OR TT$ = "si") THEN GOTO 150 130 UNITS = 4.727: G = 32.174: 140 PRINT " US CUSTOMARY UNITS SPEC. ,VISCOSITY IN FT^2/S="; VNU: GOTO 170 150 UNITS = 10.674: G = 9.806: 160 PRINT " SI UNITS SPEC. ,VISCOSITY IN M^2/S="; VNU 170 PRINT " DESIRED TOLERANCE="; TOL; " NO. OF ITERATIONS"; KK 180 PRINT " PIPE Q(CFS OR M^3/S) L(FT OR M) D(FT OR M) HW C OR EPS" 190 READ NPI, TT$: IF NPI = 0 THEN 310 200 'NPI=NO. OF PIPES IN NETWORK, TT$="HW" OR "DW" 210 FOR I1 = 1 TO NPI: READ I, QQ, l, D, X3: IF X3 = 0! THEN X3 = DEFA 220 'I=PIPE NO.,QQ=FLOW, L=LENGTH, D=DIAMETER, X3=C OR EPS 230 Q(I) = QQ: KP = 4 * (I - 1) + 1 240 IF TT$ = "HW" OR TT$ = "hw" THEN 280 250 ITYPE(I) = 2: ELEM(KP) = l / (2! * G * D ^ 5 * .7854 ^ 2): 'DW 260 ELEM(KP + 1) = 1! / (.7854 * D * VNU): ELEM(KP + 2) = X3 / (3.7 * D): 270 EX = 2!: GOTO 290 280 ITYPE(I) = 1: EX = 1.852: ELEM(KP) = UNITS * l / (X3 ^ EX * D ^ 4.8704) 'HW 290 EN = EX - 1!: PRINT " "; I; : 300 PRINT USING "#####.#####"; Q(I); l; D; X3: NEXT I1 310 READ NPS, TT$: IF NPS = 0 THEN 360 320 'NPS=NO. OF PSEUDO ELEMENTS, TT$="PS" 330 FOR I1 = 1 TO NPS: READ I, DH: ITYPE(I) = 3: KP = 4 * (I - 1) + 1 340 ELEM(KP) = DH: PRINT " "; I; " RESERVOIR ELEV. DIFFERENCE="; DH 350 NEXT I1 360 READ NPU, TT$: IF NPU = 0 THEN 480 370 'NPU=NO. OF PUMPS, TT$="PU" 380 FOR I1 = 1 TO NPU: READ I, QQ, DQ, H1, H2, H3, H4: ITYPE(I) = 4 390 'I=PUMP NO.,QQ=FLOW,DQ=DEL Q, H1,H2,H3,H4=EQUALLY SPACED PTS ON PUMP CURVE 400 KP = 4 * (I - 1) + 1: Q(I) = QQ: ELEM(KP) = H1 410 ELEM(KP + 3) = (H4 - 3! * (H3 - H2) - H1) / (6! * DQ ^ 3) 420 ELEM(KP + 2) = (H3 - 2! * H2 + H1) / (2! * DQ ^ 2) - 3! * ELEM(KP + 3) * DQ 430 ELEM(KP + 1) = (H2 - H1) / DQ - ELEM(KP + 2) * DQ - ELEM(KP + 3) * DQ ^ 2 440 PRINT " "; I; " PUMP CURVE, DQ="; DQ; "H="; H1, H2, H3, H4 450 PRINT " COEF. IN PUMP EQ.="; ELEM(KP); ELEM(KP + 1); ELEM(KP + 2); ELEM(KP + 3) 460 NEXT I1 470 '*******READ LOOP INDEXING DATA AND BALANCE ALL LOOPS***************** 480 READ NI, TT$: IF NI = 0 THEN 820 490 'NI=NO. OF ITEMS IN VECTOR IND, TT$="IND" 500 FOR I = 1 TO NI: READ IND(I): NEXT I: IND(NI + 1) = 0 510 PRINT "IND="; : FOR I = 1 TO NI: PRINT IND(I); : NEXT I 520 FOR K = 1 TO KK: DDQ = 0!: IP = 1 530 I1 = IND(IP): IF I1 = 0 THEN 780 540 DH = 0!: HDQ = 0! 550 FOR J = 1 TO I1: I = IND(IP + J): IF I < 0 THEN 570 560 IF I = 0 THEN 710 ELSE GOTO 580 570 S(J) = -1!: I = -I: GOTO 590 580 S(J) = 1! 590 NTY = ITYPE(I): KP = 4 * (I - 1) + 1 600 ON NTY GOTO 610, 620, 680, 690 610 R = ELEM(KP): GOTO 660 620 REY = ELEM(KP + 1) * ABS(Q(I)): IF REY < 1! THEN REY = 1! 630 IF REY < 2000! THEN 640 ELSE GOTO 650 640 R = ELEM(KP) * 64! / REY: GOTO 660 650 R = ELEM(KP) * 1.325 / (LOG(ELEM(KP + 2) + 5.74 / REY ^ .9)) ^ 2 660 DH = DH + S(J) * R * Q(I) * ABS(Q(I)) ^ EN 670 HDQ = HDQ + EX * R * ABS(Q(I)) ^ EN: GOTO 710 680 DH = DH + S(J) * ELEM(KP): GOTO 710 690 DH = DH - S(J) * (ELEM(KP) + Q(I) * (ELEM(KP + 1) + Q(I) * (ELEM(KP + 2) + Q(I) * ELEM(KP + 3)))) 700 HDQ = HDQ - (ELEM(KP + 1) + 2! * ELEM(KP + 2) * Q(I) + 3! * ELEM(KP + 3) * Q(I) ^ 2) 710 NEXT J 720 IF ABS(HDQ) < .0001 THEN HDQ = 1! 730 DQ = -DH / HDQ: DDQ = DDQ + ABS(DQ) 740 FOR J = l TO I1: I = ABS(IND(IP + J)): IF ITYPE(I) = 3 THEN 760 750 Q(I) = Q(I) + S(J) * DQ 760 NEXT J 770 IP = IP + I1 + 1: GOTO 530 780 PRINT : PRINT " ITERATION NO."; K; " SUM OF FLOW CORRECTIONS="; 790 PRINT USING "###.####"; DDQ 800 IF DDQ < TOL THEN 820 810 NEXT K 820 PRINT " ELEMENT FLOW": FOR I = 1 TO 100: NTY = ITYPE(I) 830 ON NTY GOTO 840, 840, 850, 840, 850 840 PRINT " "; I; : PRINT USING " ¡ì##.####"; Q(I) 850 NEXT I 855 '******* DATA FOR PATH THRU SYSTEM TO COMPUTE HGL*********************** 860 READ NU, TT$: IF NU = 0 THEN 80 'NU=NO. OF NODES WITH GIVEN HGL,TT*=NODES 865 FOR I = 1 TO NU: READ I1, H2: H(I1) = H2: NEXT I 870 READ NI, TT$: IF NI = 0 THEN 80 'NI=NO. OF ITEMS IN PATH, TT$="IX" 875 FOR I = 1 TO NI: READ IX(I): NEXT I: IX(NI + 2) = 0 880 PRINT " IX="; : FOR I = 1 TO NI: PRINT IX(I); : NEXT I: PRINT 885 IP = 1 890 FOR J = l TO 238 STEP 2: IF J = 1 THEN K = IX(IP) 895 I = IX(IP + J): N = IX(IP + J + 1) GOTO 910 900 IF I < 1 THEN SS = -1!: I = -I: GOTO 910 905 IF I = 0 THEN 955 ELSE SS = 1! 910 NTY = ITYPE(I): KP = 4 * (I - 1) + 1 915 ON NTY GOTO 920, 925, 945, 950, 955 920 R = ELEM(KP): GOTO 940 925 REY = ELEM(KP + 1) * ABS(Q(I)): IF REY < 1! THEN REY = 1! 930 IF REY < 2000! THEN R = ELEM(KP) * 64! / REY: GOTO 940 935 IF REY >= 2000! THEN R = ELEM(KP) * 1.325 / (L0G(ELEM(KP + 2) + 5.74 / REY ^ .9)) ^ 2 940 H(N) = H(K) - SS * R * Q(I) * ABS(Q(I)) ^ EN: GOTO 955 945 H(N) = H(K) - SS * ELEM(KP): GOTO 955 950 H(N) = H(K) + SS * (ELEM(KP) + Q(I) * (ELEM(KP + l) + Q(I) * (ELEM(KP + 2) + Q(I) * ELEM(KP + 3)))) 955 IF IX(J + IP + 3) = 0 THEN 975 960 IF IX(J + IP + 2) = 0 THEN 970 965 K = N: NEXT J 970 'IP = IP + J + 3: GOTO 890 975 PRINT " JUNCTION HEAD" 980 FOR N = I TO 100: IF H(N) = -1000! THEN 990 985 PRINT " "; N; : PRINT USING " ###.##"; H(N) 990 NEXT N 995 GOTO 80 DATA EXAMPLE 11.12 DATA SI,30,.001,.000001,100. DATA 5,HW DATA 1,.12,600.,0.3, .0 DATA 2,.03,300.,0.15,.0 DATA 3,.0, 500.,0.6, .0 DATA 4,.03,400.,0.3, .0 DATA 5,.03,300.,0.3, .0 DATA 2,PS DATA 6,15.0 DATA 7,18.0 DATA 1,PU DATA 8,.06,.03,30.,29.,26.,20. DATA 16,IND DATA 3,2,1,-3,3,4,-5,3,3,6,-4,-1,3,5,7,8 DATA 1,NODES DATA 5,117. DATA 9,IX DATA 5,8,4,2,2,1,1,4,3